package com.itheima2.utils;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/*
JDBC工具类
*/
public class JDBCUtils {
    //私有构造方法
    private  JDBCUtils(){}

    //声明配置信息  定义为静态变量  公用
    private static String driverClass;
    private static String url;
    private static String username;
    private static String password;
    private static Connection con;  // 连接对象

    // 使用 静态代码块实现加载配置文件 和注册驱动
    static {
                //异常获取
                try {

                    // 使用类加载出配置文件的字节流
                    InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("config.properties");

                    //创建Properties集合 加载流对象信息  封装
                    Properties prop = new Properties();
                    prop.load(is);

                    // 为静态变量赋值

                    driverClass = prop.getProperty("driverClass");
                    url = prop.getProperty("url");
                    username = prop.getProperty("username");
                    password = prop.getProperty("password");


                    //注册驱动
                    Class.forName(driverClass);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 连接数据库的方法
    public  static  Connection getConnection(){
        //异常
        try {
            //为 静态变量con赋值
            con = DriverManager.getConnection(url, username, password);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return con;
    }

    //释放资源的方法
    public  static  void  close(Connection con, Statement stat, ResultSet rs){
        if (con != null) {
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            if (stat != null) {
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }

            }
        }
    }

    //方法重载
    public static void close(Connection con, Statement stat) {
        close(con,stat,null);
    }
}
